package co.baiku.boot.pay.v3.response;

import co.baiku.boot.v3.model.*;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;

import java.io.Serializable;
import java.util.List;

@JsonIgnoreProperties(ignoreUnknown = true)
public class WeixinPayScoreOrderResponse implements Serializable {
    /**
     * 公众账号ID
     */
    private String appid;
    /**
     * 商户号
     */
    private String mchid;
    /**
     * 商户服务订单号
     */
    @JsonProperty("out_order_no")
    private String outOrderNo;
    /**
     * 调用该接口提交的服务ID。
     */
    @JsonProperty("service_id")
    private String serviceId;
    /**
     * 微信支付服务订单号
     * <pre>
     * 微信支付服务订单号，每个微信支付服务订单号与商户号下对应的商户服务订单号一一对应。
     * 示例值：15646546545165651651
     * </pre>
     */
    @JsonProperty("order_id")
    private String orderId;
    /**
     * 跳转微信侧小程序订单数据
     * <pre>
     * 用于跳转到微信侧小程序订单数据,跳转到微信侧小程序传入。该数据1小时内有效。
     * 示例值：DJIOSQPYWDxsjdldeuwhdodwxasd_dDiodnwjh9we
     * </pre>
     */
    @JsonProperty("package")
    private String packageValue;
    /**
     * 服务信息，用于介绍本订单所提供的服务。<br/>
     * 示例值：某某酒店
     */
    @JsonProperty("service_introduction")
    private String serviceIntroduction;
    /**
     * 服务订单状态:表示当前单据状态。
     * <pre>
     * 枚举值：
     * 1、CREATED：商户已创建服务订单
     * 2、DOING：服务订单进行中
     * 3、DONE：服务订单完成
     * 4、REVOKED：商户取消服务订单
     * 5、EXPIRED：服务订单已失效，"商户已创建服务订单"状态超过30天未变动，则订单失效
     * </pre>
     */
    private String state;
    @JsonProperty("notify_url")
    private String notifyUrl;
    /**
     * 订单状态说明
     * <pre>
     * 对服务订单"进行中"状态的附加说明。
     * 1、USER_CONFIRM：用户确认
     * 2、MCH_COMPLETE：商户完结
     * 示例值：MCH_COMPLETE
     * </pre>
     */
    @JsonProperty("state_description")
    private String stateDescription;
    /**
     * 商户数据包
     * <pre>
     * 商户数据包,可存放本订单所需信息，需要先urlencode后传入，总长度不大于256字符,超出报错处理。
     * 示例值：Easdfowealsdkjfnlaksjdlfkwqoi&wl3l2sald
     * </pre>
     */
    private String attach;

    /**
     * 后付费项目
     * <p>后付费项目列表，最多包含100条付费项目。
     * 如果传入，用户侧则显示此参数。
     * </p>
     */
    @JsonProperty("post_payments")
    private List<WeixinPayScorePostPayment> postPayments;
    /**
     * 后付费商户优惠
     * <p>
     * 后付费商户优惠列表，最多包含30条商户优惠。
     * 如果传入，用户侧则显示此参数。
     * </p>
     */
    @JsonProperty("post_discounts")
    private List<WeixinPayScorePostDiscounts> postDiscounts;

    /**
     * [必填] 服务时间段
     * <p>服务时间范围
     * </p>
     */
    @JsonProperty("time_range")
    private WeixinPayScoreTimeRange timeRange;
    /**
     * 服务位置信息
     * 如果传入，用户侧则显示此参数。
     */
    private WeixinPayScoreLocation location;
    /**
     * 订单风险金	<p>
     * 订单风险金信息
     * </p>
     */
    @JsonProperty("risk_fund")
    private WeixinPayScoreRiskFund riskFund;
    /**
     * 是否需要收款
     * <pre>
     * true：微信支付分代收款
     * false：无需微信支付分代收款
     * 示例值：true
     * </pre>
     */
    @JsonProperty("need_collection")
    private Boolean needCollection;
    /**
     * 收款信息
     */
    private WeixinPayScoreCollection collection;

    public Boolean getNeedCollection() {
        return needCollection;
    }

    public void setNeedCollection(Boolean needCollection) {
        this.needCollection = needCollection;
    }

    public WeixinPayScoreCollection getCollection() {
        return collection;
    }

    public void setCollection(WeixinPayScoreCollection collection) {
        this.collection = collection;
    }

    public String getAppid() {
        return appid;
    }

    public void setAppid(String appid) {
        this.appid = appid;
    }

    public String getMchid() {
        return mchid;
    }

    public void setMchid(String mchid) {
        this.mchid = mchid;
    }

    public String getOutOrderNo() {
        return outOrderNo;
    }

    public void setOutOrderNo(String outOrderNo) {
        this.outOrderNo = outOrderNo;
    }

    public String getServiceId() {
        return serviceId;
    }

    public void setServiceId(String serviceId) {
        this.serviceId = serviceId;
    }

    public String getOrderId() {
        return orderId;
    }

    public void setOrderId(String orderId) {
        this.orderId = orderId;
    }

    public WeixinPayScoreTimeRange getTimeRange() {
        return timeRange;
    }

    public void setTimeRange(WeixinPayScoreTimeRange timeRange) {
        this.timeRange = timeRange;
    }

    public String getPackageValue() {
        return packageValue;
    }

    public void setPackageValue(String packageValue) {
        this.packageValue = packageValue;
    }

    public String getServiceIntroduction() {
        return serviceIntroduction;
    }

    public void setServiceIntroduction(String serviceIntroduction) {
        this.serviceIntroduction = serviceIntroduction;
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

    public String getStateDescription() {
        return stateDescription;
    }

    public void setStateDescription(String stateDescription) {
        this.stateDescription = stateDescription;
    }

    public String getAttach() {
        return attach;
    }

    public void setAttach(String attach) {
        this.attach = attach;
    }

    public List<WeixinPayScorePostPayment> getPostPayments() {
        return postPayments;
    }

    public void setPostPayments(List<WeixinPayScorePostPayment> postPayments) {
        this.postPayments = postPayments;
    }

    public List<WeixinPayScorePostDiscounts> getPostDiscounts() {
        return postDiscounts;
    }

    public void setPostDiscounts(List<WeixinPayScorePostDiscounts> postDiscounts) {
        this.postDiscounts = postDiscounts;
    }
    public WeixinPayScoreLocation getLocation() {
        return location;
    }

    public void setLocation(WeixinPayScoreLocation location) {
        this.location = location;
    }

    public WeixinPayScoreRiskFund getRiskFund() {
        return riskFund;
    }

    public void setRiskFund(WeixinPayScoreRiskFund riskFund) {
        this.riskFund = riskFund;
    }

    public String getNotifyUrl() {
        return notifyUrl;
    }

    public void setNotifyUrl(String notifyUrl) {
        this.notifyUrl = notifyUrl;
    }
}
